/*
 * Copyright (c) 2009 Dr. D Studios. (Please refer to license for details)
 * SVN_META_HEADURL = "$HeadURL: $"
 * SVN_META_ID = "$Id: renderable.h 42544 2010-08-17 04:31:03Z allan.johns $"
 */

#ifndef grind_renderable_h
#define grind_renderable_h

namespace grind
{

//! pre-declare
class BBox;

//-------------------------------------------------------------------------------------------------
//! an object that is renderable
class Renderable
{
public:

	//! get the bounding box of the current object
	virtual BBox getBounds() const;

	//! render in the current context
	virtual void render( float lod //! level of detail parameter
			) const;

	//! @cond DEV

	//! default constructor
	Renderable();

	//! default destructor
	virtual ~Renderable();

private:
	//! dump appropriate OpenGL calls into an OpenGL context
	/*!
	 * \note default implementation will throw an error
	 */
	virtual void dumpGL( float lod //! level of detail parameter
			) const;

	//! dump appropriate RIB calls into a RIB stream
	/*!
	 * \note default implementation will throw an error
	 */
	virtual void dumpRib( float lod //! level of detail parameter
			) const;

	//! @endcond
};

} // namespace Grind

#endif /* grind_renderable_h */


/***
    Copyright 2008-2012 Dr D Studios Pty Limited (ACN 127 184 954) (Dr. D Studios)

    This file is part of anim-studio-tools.

    anim-studio-tools is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    anim-studio-tools is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with anim-studio-tools.  If not, see <http://www.gnu.org/licenses/>.
***/
